Chapter 2, float data type, 4 unix> cat float4.c #include #include void printfloat2(int); main() { int i, low, high; printf("enter lower power of 2 "); scanf("%d%", &low); printf("enter higher power of 2 "); scanf("%d", &high); printf("\n 2**exp Hex +- exp+127 1. fraction\n\n"); for (i = low; i <= high; i++) { printfloat2(i); } printf("\n"); } void printfloat2(int exp) { unsigned long i; union floatandlong { float asfloat; long aslong; } bits32; bits32.asfloat = ldexp(1.0, exp); /* 1.0 * 2**exp */ printf(" %14d %8.8x ", exp, bits32.aslong); for (i = 0x80000000ul; i > 0; i>>=1) { if (i == 0x40000000ul) printf(" "); if (i == 0x00400000ul) printf(" "); printf("%c", (i & bits32.aslong ? '1' : '0')); } printf("\n"); } unix> gcc float4.c unix> ./a.out enter lower power of 2 -10 enter higher power of 2 10 2**exp Hex +- exp+127 1. fraction -10 3a800000 0 01110101 00000000000000000000000 -9 3b000000 0 01110110 00000000000000000000000 -8 3b800000 0 01110111 00000000000000000000000 -7 3c000000 0 01111000 00000000000000000000000 -6 3c800000 0 01111001 00000000000000000000000 -5 3d000000 0 01111010 00000000000000000000000 -4 3d800000 0 01111011 00000000000000000000000 -3 3e000000 0 01111100 00000000000000000000000 -2 3e800000 0 01111101 00000000000000000000000 -1 3f000000 0 01111110 00000000000000000000000 0 3f800000 0 01111111 00000000000000000000000 1 40000000 0 10000000 00000000000000000000000 2 40800000 0 10000001 00000000000000000000000 3 41000000 0 10000010 00000000000000000000000 4 41800000 0 10000011 00000000000000000000000 5 42000000 0 10000100 00000000000000000000000 6 42800000 0 10000101 00000000000000000000000 7 43000000 0 10000110 00000000000000000000000 8 43800000 0 10000111 00000000000000000000000 9 44000000 0 10001000 00000000000000000000000 10 44800000 0 10001001 00000000000000000000000 CIS-Linux2:~/oct14>./a.out enter lower power of 2 -140 enter higher power of 2 -120 2**exp Hex +- exp+127 1. fraction -140 00000200 0 00000000 00000000000001000000000 -139 00000400 0 00000000 00000000000010000000000 -138 00000800 0 00000000 00000000000100000000000 -137 00001000 0 00000000 00000000001000000000000 -136 00002000 0 00000000 00000000010000000000000 -135 00004000 0 00000000 00000000100000000000000 -134 00008000 0 00000000 00000001000000000000000 -133 00010000 0 00000000 00000010000000000000000 -132 00020000 0 00000000 00000100000000000000000 -131 00040000 0 00000000 00001000000000000000000 -130 00080000 0 00000000 00010000000000000000000 -129 00100000 0 00000000 00100000000000000000000 -128 00200000 0 00000000 01000000000000000000000 -127 00400000 0 00000000 10000000000000000000000 -126 00800000 0 00000001 00000000000000000000000 -125 01000000 0 00000010 00000000000000000000000 -124 01800000 0 00000011 00000000000000000000000 -123 02000000 0 00000100 00000000000000000000000 -122 02800000 0 00000101 00000000000000000000000 -121 03000000 0 00000110 00000000000000000000000 -120 03800000 0 00000111 00000000000000000000000 CIS-Linux2:~/oct14>